/*
 * 描述： <描述>
 * 修改人： rain
 * 修改时间： 2016年01月20日
 * 项目： rainhy-cores-webcore
 */
package com.rainhy.incrementer.context;

import java.util.HashMap;
import java.util.Map;

import org.apache.commons.collections.MapUtils;
import org.springframework.beans.factory.InitializingBean;
import org.springframework.context.ApplicationContext;

import com.rainhy.core.util.AssertUtils;

/**
 * 
 * 自增长容器生产者建造器
 * 
 * @author rain
 * @version [版本号, 2016年1月21日]
 * @see [相关类/方法]
 * @since [产品/模块版本]
 */
public class IncrementerContextBuilder extends IncrementerContextConfigurator implements InitializingBean {
    
    /** 类型2自增长生产者 */
    private Map<String, IncrementerProducer> incrementerProducerMap = new HashMap<>();
    
    @Override
    public void afterPropertiesSet() throws Exception {
        super.afterPropertiesSet();
        ApplicationContext applicationContext = getApplicationContext();
        Map<String, IncrementerProducer> beans = applicationContext.getBeansOfType(IncrementerProducer.class);
        if (MapUtils.isNotEmpty(beans)) {
            for (IncrementerProducer producer : beans.values()) {
                if (producer.isSupport()) {
                    String dataSourceType = producer.getDataSourceType();
                    if (incrementerProducerMap.containsKey(dataSourceType)) {
                        AssertUtils.isTrue(false, "已经存在相同的自增长器生产者 : {}", dataSourceType);
                    }
                    incrementerProducerMap.put(dataSourceType, producer);
                }
            }
        }
    }
    
    /** 自增长生产者 */
    public IncrementerProducer getIncrementerProducer() {
        return incrementerProducerMap.get(getIncrementerProducerType());
    }
}